package cnsatmsmart.automation.mmi.model.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 * @author SIK - PTIK, BPPT
 **/

public class DataBase {
    /* atribut - atribut yang dimiliki oleh kelas DataBase */
        private Statement statemnt = null;  //hubungan koneksi query
        private ResultSet res = null;       //hasil eksekusi query
        private Connection conn = null;     //hubungan koneksi MySQL dan basis data JDBC

    /* constructor - user defined ctor, no default ctor */
        // <editor-fold defaultstate="collapsed" desc="ctor">
        /**
         * membentuk hubungan koneksi antara MySQL dan basis data JDBC
         * @param ConnAddr string yang merupakan alamat koneksi antara MySQL dan basis data JDBC
         */
        public DataBase(String ConnAddr) {
            try {
                //membentuk driver untuk MySQL
                    Class.forName("com.mysql.jdbc.Driver").newInstance();
                //membentuk hubungan koneksi antara MySQL dan basis data JDBC
                    this.conn = DriverManager.getConnection(ConnAddr);
                    this.conn.setTransactionIsolation(this.conn.TRANSACTION_READ_UNCOMMITTED);
            } catch (Exception e) {
                System.out.println("log.database.ctor.exc : " + e.getMessage());
            }
        }
        // </editor-fold>

    /* getter */
        /**
         * mengembalikan nilai dari atribut res yang merupakan hasil dari eksekusi query
         * @return nilai dari atribut res yang merupakan hasil dari eksekusi query
         */
        public ResultSet getResultSet() {
            ResultSet RetVal = null;
            try {
                return (this.res);
            } catch (Exception e) {
                return (RetVal);
            }
        }

    /* method - method yang dimiliki oleh kelas DataBase */
        /**
         * melakukan eksekusi query tanpa melakukan alterasi perubahan terhadap isi data
         * @param query string yang merupakan query yang akan dieksekusi
         */
        public void createQuery(String query) {
            try {
                this.statemnt = this.conn.createStatement();
                //melakukan eksekusi query
                    this.res = this.statemnt.executeQuery(query);
                    if (this.statemnt.execute(query)) {
                        //get hasil dari eksekusi query
                            this.res = this.statemnt.getResultSet();
                    }
            } catch (Exception e) {
                System.out.println("log.database.createQuery.exc : " + e.getMessage());
            }
        }
        /**
         * melakukan eksekusi query dan / atau melakukan alterasi perubahan terhadap isi data (add / insert, edit / update, delete)
         * @param query string yang merupakan query yang akan dieksekusi
         */
        public void createUpdateQuery(String query) {
            try {
                this.statemnt = this.conn.createStatement();
                //melakukan eksekusi query
                    int RetVal = this.statemnt.executeUpdate(query);
            } catch (Exception e) {
                System.out.println("log.database.createUpdateQuery.exc : " + e.getMessage());
            }
        }
        
        /**
         * melakukan penutupan terhadap koneksi hubungan hasil eksekusi query
         */
        public void closeResultSet() {
            if (this.res != null) {
                try {
                    this.res.close();
                } catch (Exception e) {
                    this.res = null;
                    System.out.println("log.database.closeResultSet - res.exc : " + e.getMessage());
                }
            }
            if (this.statemnt != null) {
                try {
                    this.statemnt.close();
                } catch (Exception e) {
                    this.statemnt = null;
                    System.out.println("log.database.closeResultSet - statemnt.exc : " + e.getMessage());
                }
            }
        }
        /**
         * melakukan penutupan terhadap koneksi hubungan antara MySQL dengan basis data JDBC
         */
        public void closeConnection() {
            if (this.conn != null) {
                try {
                    this.conn.close();
                } catch (Exception e) {
                    this.conn = null;
                    System.out.println("log.database.closeConnection.exc : " + e.getMessage());
                }
            }
        }
}
